/*
 正则常见用法 包含
 正则.test(字符串) 返回boolean
 字符串.search(正则) 返回第一次出现的位置
 字符串.match(正则) 查找符合规则的内容，返回数组
 字符串.replace(正则 ，要替换的结果/回调函数) 通过正则匹配查找到对应内容，替换成想要的结果

*/



/*
一、
RegExp对象。参数就是我们想要制定的规则。有一种情况必须用这种方式，下面会提到。
简写方法 推荐使用 性能更好  不能为空 不然以为是注释 ，
正则.test(字符串); 查找到true , 否则false
*/
var re1 = new RegExp("a");
var re2 = /a/;

console.log(re1.test('abc'));
console.log(re2.test('abc'));
console.log(re1.test('bc'));
console.log(re2.test('bc'));
console.log("--------------------------------------------------------------");
/*
二、
search():在字符串搜索符合正则的内容.
搜索到就返回出现的位置（从0开始，如果搜到多个返回第一个字母的位置）
如果搜索失败就返回 -1
字符串.search(正则)
如果在搜索时想忽略大小写的话加i
字符串.search(正则,'i')
*/

console.log('abCcc'.search(/c/i))

console.log("--------------------------------------------------------------");

/*
三、
match()  在字符串中搜索复合规则的内容，搜索成功就返回内容，格式为数组，失败就返回null。
量词：+ 至少出现一次 匹配不确定的次数（匹配就是搜索查找的意思）
全局匹配：g——global（正则中默认，只要搜索到复合规则的内容就会结束搜索 ）
字符串.match(正则)
*/

var str = 'haj123sdk54hask33dkhalsd879';
// 每次匹配至少一个数字  且全局匹配  如果不是全局匹配，当找到数字123，它就会停止了。就只会弹出123.加上全局匹配，就会从开始到结束一直去搜索符合规则的。如果没有加号，匹配的结果就是1，2，3，5，4，3，3，8，7，9并不是我们想要的，有了加号，每次匹配的数字就是至少一个了。
var re = /\d+/g;

console.log(str.match(re) );   // [123，54，33，879]

console.log("--------------------------------------------------------------");

/*
四、
replace() :查找符合正则的字符串，就替换成对应的字符串。返回替换后的内容。
字符串.replace(正则,新的字符串/回调函数)（在回调函数中，第一个参数指的是每次匹配成功的字符）
| : 或的意思 。

例子：敏感词过滤，比如 我爱北京天安门，天安门上太阳升。------我爱*****，****上太阳升。即北京和天安门变成*号，
 */

//一开始我们可能会想到这样的方法,这种只是把找到的变成了一个*，并不能几个字就对应几个*。

var str = "我爱北京天安门，天安门上太阳升。";
var re = /北京|天安门/g;  //  找到北京 或者天安门 全局匹配
var str2 = str.replace(re,'*');
console.log(str2)  //我爱**，*上太阳升

//要想实现几个字对应几个*，我们可以用回调函数实现：
var str = "我爱北京天安门，天安门上太阳升。";
var re = /北京|天安门/g;  //  找到北京 或者天安门 全局匹配
var str2 = str.replace(re,function(str){
    console.log(str); //用来测试：函数的第一个参数代表每次搜索到的符合正则的字符，所以第一次str指的是北京 第二次str是天安门 第三次str是天安门
    var result = '';
    for(var i=0;i<str.length;i++){
        result += '*';
    }
    return result; //所以搜索到了几个字就返回几个*
});

console.log(str2)  //我爱*****，***上太阳升
